	.arch armv8-a
	.arch_extension crc
	.arm
	.data
	.section .rodata
	.global RADIUS
	.align 4
	.size RADIUS, 4
RADIUS:
	.word 1085276160
	.global PI
	.align 4
	.size PI, 4
PI:
	.word 1078530011
	.global EPS
	.align 4
	.size EPS, 4
EPS:
	.word 897988541
	.global PI_HEX
	.align 4
	.size PI_HEX, 4
PI_HEX:
	.word 0
	.global HEX2
	.align 4
	.size HEX2, 4
HEX2:
	.word 0
	.global FACT
	.align 4
	.size FACT, 4
FACT:
	.word 3338725376
	.global EVAL1
	.align 4
	.size EVAL1, 4
EVAL1:
	.word 1119752445
	.global EVAL2
	.align 4
	.size EVAL2, 4
EVAL2:
	.word 0
	.global EVAL3
	.align 4
	.size EVAL3, 4
EVAL3:
	.word 1107966694
	.global CONV1
	.align 4
	.size CONV1, 4
CONV1:
	.word 1130954752
	.global CONV2
	.align 4
	.size CONV2, 4
CONV2:
	.word 1166012416
	.global MAX
	.align 4
	.size MAX, 4
MAX:
	.word 1000000000
	.global TWO
	.align 4
	.size TWO, 4
TWO:
	.word 2
	.global THREE
	.align 4
	.size THREE, 4
THREE:
	.word 3
	.global FIVE
	.align 4
	.size FIVE, 4
FIVE:
	.word 6
	.text
	.global float_abs
	.type float_abs , %function
float_abs:
	push {r4, r5, r6, r10, fp, lr}
	mov fp, sp
	sub sp, sp, #4
.L131:
	str r0, [fp, #-4]
	ldr r10, [fp, #-4]
	cmp r10, #0
	cmp r10, #0
	movlt r4, #1
	movgt r4, #0
	blt .L133
	b .L141
.L133:
	ldr r4, [fp, #-4]
	ldr r5, =0
	sub r6, r5, r4
	mov r0, r6
	add sp, sp, #4
	pop {r4, r5, r6, r10, fp, lr}
	bx lr
	b .L134
.L134:
	ldr r4, [fp, #-4]
	mov r0, r4
	add sp, sp, #4
	pop {r4, r5, r6, r10, fp, lr}
	bx lr
.L137:
	b .L136
.L141:
	b .L134

	.global circle_area
	.type circle_area , %function
circle_area:
	push {r4, r5, r6, r7, r9, r10, fp, lr}
	mov fp, sp
	sub sp, sp, #4
.L142:
	str r0, [fp, #-4]
	ldr r10, addr_PI0
	ldr r9, [r10]
	ldr r4, [fp, #-4]
	mul r5, r9, r4
	ldr r4, [fp, #-4]
	mul r6, r5, r4
	ldr r4, [fp, #-4]
	ldr r5, [fp, #-4]
	mul r7, r4, r5
	ldr r4, addr_PI0
	ldr r5, [r4]
	mul r4, r7, r5
	add r5, r6, r4
	ldr r4, =2
	sdiv r6, r5, r4
	mov r0, r6
	add sp, sp, #4
	pop {r4, r5, r6, r7, r9, r10, fp, lr}
	bx lr

	.global float_eq
	.type float_eq , %function
float_eq:
	push {r4, r5, r6, r8, r9, r10, fp, lr}
	mov fp, sp
	sub sp, sp, #8
.L144:
	str r0, [fp, #-8]
	str r1, [fp, #-4]
	ldr r10, [fp, #-8]
	cmp r10, #0
	ldr r9, [fp, #-4]
	cmp r9, #0
	sub r8, r10, r9
	mov r0, r8
	bl float_abs
	mov r4, r0
	cmp r4, #0
	ldr r5, addr_EPS0
	ldr r6, [r5]
	cmp r6, #0
	cmp r4, r6
	movlt r4, #1
	movgt r4, #0
	blt .L147
	b .L168
.L147:
	ldr r4, =1
	ldr r5, =2
	mul r6, r4, r5
	ldr r4, =2
	sdiv r5, r6, r4
	mov r0, r5
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
	b .L148
.L148:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
.L149:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
	b .L148
.L151:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
.L152:
	b .L151
.L155:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
.L156:
	b .L155
.L159:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
.L160:
	b .L159
.L163:
	mov r0, #0
	add sp, sp, #8
	pop {r4, r5, r6, r8, r9, r10, fp, lr}
	bx lr
.L164:
	b .L163
.L168:
	b .L149

	.global error
	.type error , %function
error:
	push {fp, lr}
	mov fp, sp
	sub sp, sp, #0
.L169:
	mov r0, #101
	bl putch
	mov r0, #114
	bl putch
	mov r0, #114
	bl putch
	mov r0, #111
	bl putch
	mov r0, #114
	bl putch
	mov r0, #10
	bl putch
	add sp, sp, #0
	pop {fp, lr}
	bx lr

	.global ok
	.type ok , %function
ok:
	push {fp, lr}
	mov fp, sp
	sub sp, sp, #0
.L170:
	mov r0, #111
	bl putch
	mov r0, #107
	bl putch
	mov r0, #10
	bl putch
	add sp, sp, #0
	pop {fp, lr}
	bx lr

	.global assert
	.type assert , %function
assert:
	push {r4, r10, fp, lr}
	mov fp, sp
	sub sp, sp, #4
.L171:
	str r0, [fp, #-4]
	ldr r10, [fp, #-4]
	cmp r10, #0
	cmp r10, #0
	moveq r4, #1
	movne r4, #0
	cmp r4, #0
	bne .L173
	b .L183
.L173:
	bl error
	b .L174
.L174:
	add sp, sp, #4
	pop {r4, r10, fp, lr}
	bx lr
.L175:
	bl ok
	b .L174
.L176:
	add sp, sp, #4
	pop {r4, r10, fp, lr}
	bx lr
.L177:
	add sp, sp, #4
	pop {r4, r10, fp, lr}
	bx lr
.L178:
	b .L177
.L181:
	add sp, sp, #4
	pop {r4, r10, fp, lr}
	bx lr
.L182:
	add sp, sp, #4
	pop {r4, r10, fp, lr}
	bx lr
.L183:
	b .L175

	.global main
	.type main , %function
main:
	push {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	mov fp, sp
	sub sp, sp, #64
.L185:
	ldr r10, addr_HEX20
	ldr r9, [r10]
	ldr r4, addr_FACT0
	ldr r5, [r4]
	mov r0, r9
	mov r1, r5
	bl float_eq
	mov r4, r0
	cmp r4, #0
	moveq r4, #1
	movne r4, #0
	mov r0, r4
	bl assert
	ldr r4, addr_EVAL10
	ldr r5, [r4]
	ldr r4, addr_EVAL20
	ldr r6, [r4]
	mov r0, r5
	mov r1, r6
	bl float_eq
	mov r4, r0
	cmp r4, #0
	moveq r4, #1
	movne r4, #0
	mov r0, r4
	bl assert
	ldr r4, addr_EVAL20
	ldr r5, [r4]
	ldr r4, addr_EVAL30
	ldr r6, [r4]
	mov r0, r5
	mov r1, r6
	bl float_eq
	mov r4, r0
	mov r0, r4
	bl assert
	ldr r4, addr_RADIUS0
	ldr r5, [r4]
	mov r0, r5
	bl circle_area
	mov r4, r0
	ldr r5, addr_FIVE0
	ldr r6, [r5]
	mov r0, r6
	bl circle_area
	mov r5, r0
	mov r0, r4
	mov r1, r5
	bl float_eq
	mov r4, r0
	mov r0, r4
	bl assert
	ldr r4, addr_CONV10
	ldr r5, [r4]
	ldr r4, addr_CONV20
	ldr r6, [r4]
	mov r0, r5
	mov r1, r6
	bl float_eq
	mov r4, r0
	cmp r4, #0
	moveq r4, #1
	movne r4, #0
	mov r0, r4
	bl assert
.L189:
	bl ok
	b .L190
.L190:
	ldr r4, =3
	cmp r4, #0
	moveq r4, #1
	movne r4, #0
	cmp r4, #0
	cmp r4, #0
	moveq r4, #1
	movne r4, #0
	cmp r4, #0
	bne .L191
	b .L201
.L191:
	bl ok
	b .L192
.L192:
	ldr r4, =0
	cmp r4, #0
	bne .L205
	b .L208
.L195:
	mov r0, #0
	add sp, sp, #64
	pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	bx lr
.L196:
	b .L195
.L201:
	b .L192
.L203:
	bl error
	b .L204
.L204:
	ldr r4, =0
	cmp r4, #0
	bne .L214
	b .L219
.L205:
	ldr r4, =3
	cmp r4, #0
	bne .L203
	b .L212
.L208:
	b .L204
.L212:
	b .L204
.L214:
	bl ok
	b .L215
.L215:
	ldr r4, =1
	str r4, [fp, #-64]
	ldr r4, =0
	str r4, [fp, #-60]
	ldr r4, =1
	str r4, [fp, #-56]
	mov r4, #0
	mov r5, #-56
	mov r6, #4
	mul r7, r4, r6
	add r4, r5, r7
	add r5, fp, r4
	mov r0, r5
	bl getfarray
	mov r4, r0
	str r4, [fp, #-16]
	b .L229
.L216:
	ldr r4, =0
	cmp r4, #0
	bne .L214
	b .L223
.L219:
	b .L216
.L223:
	b .L215
.L229:
	ldr r4, [fp, #-64]
	cmp r4, #0
	ldr r5, addr_MAX0
	ldr r6, [r5]
	cmp r6, #0
	cmp r4, r6
	movlt r4, #1
	movgt r4, #0
	blt .L230
	b .L242
.L230:
	bl getfloat
	mov r4, r0
	str r4, [fp, #-12]
	ldr r4, addr_PI0
	ldr r5, [r4]
	ldr r4, [fp, #-12]
	mul r6, r5, r4
	ldr r4, [fp, #-12]
	mul r5, r6, r4
	str r5, [fp, #-8]
	ldr r4, [fp, #-12]
	mov r0, r4
	bl circle_area
	mov r4, r0
	str r4, [fp, #-4]
	ldr r4, [fp, #-60]
	mov r5, #-56
	mov r6, #4
	mul r7, r4, r6
	add r4, r5, r7
	add r5, fp, r4
	ldr r4, [r5]
	ldr r5, [fp, #-12]
	add r6, r4, r5
	ldr r4, [fp, #-60]
	mov r5, #-56
	mov r7, #4
	mul r8, r4, r7
	add r4, r5, r8
	add r5, fp, r4
	str r6, [r5]
	ldr r4, [fp, #-8]
	mov r0, r4
	bl putfloat
	mov r0, #32
	bl putch
	ldr r4, [fp, #-4]
	mov r0, r4
	bl putint
	mov r0, #10
	bl putch
	ldr r4, [fp, #-64]
	ldr r5, =0
	ldr r6, =10
	sub r7, r5, r6
	ldr r5, =0
	sub r6, r5, r7
	mul r5, r4, r6
	str r5, [fp, #-64]
	ldr r4, [fp, #-60]
	ldr r5, =1
	add r6, r4, r5
	str r6, [fp, #-60]
	b .L229
	b .F0
.LTORG
addr_RADIUS0:
	.word RADIUS
addr_PI0:
	.word PI
addr_EPS0:
	.word EPS
addr_PI_HEX0:
	.word PI_HEX
addr_HEX20:
	.word HEX2
addr_FACT0:
	.word FACT
addr_EVAL10:
	.word EVAL1
addr_EVAL20:
	.word EVAL2
addr_EVAL30:
	.word EVAL3
addr_CONV10:
	.word CONV1
addr_CONV20:
	.word CONV2
addr_MAX0:
	.word MAX
addr_TWO0:
	.word TWO
addr_THREE0:
	.word THREE
addr_FIVE0:
	.word FIVE
.F0:
.L231:
	ldr r4, [fp, #-16]
	mov r5, #0
	mov r6, #-56
	mov r7, #4
	mul r8, r5, r7
	add r5, r6, r8
	add r6, fp, r5
	mov r0, r4
	mov r1, r6
	bl putfarray
	mov r0, #0
	add sp, sp, #64
	pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	bx lr
.L233:
	mov r0, #0
	add sp, sp, #64
	pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	bx lr
.L234:
	b .L233
.L237:
	mov r0, #0
	add sp, sp, #64
	pop {r4, r5, r6, r7, r8, r9, r10, fp, lr}
	bx lr
.L238:
	b .L237
.L242:
	b .L231

addr_RADIUS1:
	.word RADIUS
addr_PI1:
	.word PI
addr_EPS1:
	.word EPS
addr_PI_HEX1:
	.word PI_HEX
addr_HEX21:
	.word HEX2
addr_FACT1:
	.word FACT
addr_EVAL11:
	.word EVAL1
addr_EVAL21:
	.word EVAL2
addr_EVAL31:
	.word EVAL3
addr_CONV11:
	.word CONV1
addr_CONV21:
	.word CONV2
addr_MAX1:
	.word MAX
addr_TWO1:
	.word TWO
addr_THREE1:
	.word THREE
addr_FIVE1:
	.word FIVE
